package com.carrental.crm.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.carrental.crm.dto.CouponDTO;
import com.carrental.crm.entity.Coupon;
import com.carrental.crm.vo.CouponVO;

import java.util.List;

/**
 * 优惠券服务接口
 */
public interface CouponService extends IService<Coupon> {

    /**
     * 创建优惠券
     *
     * @param couponDTO 优惠券DTO
     * @return 优惠券ID
     */
    Long createCoupon(CouponDTO couponDTO);

    /**
     * 更新优惠券
     *
     * @param couponDTO 优惠券DTO
     * @return 是否成功
     */
    boolean updateCoupon(CouponDTO couponDTO);

    /**
     * 根据ID获取优惠券详情
     *
     * @param id 优惠券ID
     * @return 优惠券VO
     */
    CouponVO getCouponById(Long id);

    /**
     * 分页查询优惠券列表
     *
     * @param page      分页参数
     * @param name      优惠券名称
     * @param type      优惠券类型
     * @param status    优惠券状态
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 优惠券VO分页
     */
    Page<CouponVO> pageCoupons(Page<Coupon> page, String name, Integer type, Integer status, String startTime, String endTime);

    /**
     * 获取可用优惠券列表
     *
     * @param vehicleId 车辆ID
     * @param storeId   门店ID
     * @param amount    订单金额
     * @return 优惠券VO列表
     */
    List<CouponVO> getAvailableCoupons(Long vehicleId, Long storeId, Double amount);

    /**
     * 更新优惠券状态
     *
     * @param id     优惠券ID
     * @param status 优惠券状态
     * @return 是否成功
     */
    boolean updateCouponStatus(Long id, Integer status);

    /**
     * 增加发放数量
     *
     * @param id    优惠券ID
     * @param count 增加数量
     * @return 是否成功
     */
    boolean incrementIssueCount(Long id, Integer count);

    /**
     * 增加使用数量
     *
     * @param id 优惠券ID
     * @return 是否成功
     */
    boolean incrementUsedCount(Long id);
} 